#include <QtGui>
#include <QtNetwork>
#include <iostream>
#include <QApplication>
#include "network.h"

Sender::Sender(QWidget *parent) : QDialog(parent) {
    udpSocket = new QUdpSocket(this);
}

void Sender::sendMessage(QString actionToPreform){
    QByteArray actionToSend;
    actionToSend.append(actionToPreform);
    udpSocket->writeDatagram(actionToSend.data(), actionToSend.size(),
                             QHostAddress::Broadcast, 45454);
    std::cout << "Successfuly Sent: " << actionToPreform.toStdString() << std::endl;
}

Receiver::Receiver(QWidget *parent) : QDialog(parent) {
    statusLabel = new QLabel(tr("Listening for broadcasted messages"));
    quitButton = new QPushButton(tr("&Quit"));

    udpSocket = new QUdpSocket(this);
    udpSocket->bind(45454);

    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(processPendingDatagrams()));
    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));

    QHBoxLayout *buttonLayout = new QHBoxLayout;
    buttonLayout->addStretch(1);
    buttonLayout->addWidget(quitButton);
    buttonLayout->addStretch(1);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(statusLabel);
    mainLayout->addLayout(buttonLayout);
    setLayout(mainLayout);

    setWindowTitle(tr("Broadcast Receiver"));
}

QByteArray Receiver::processPendingDatagrams() {
    std::cout << "Looking for Pending Datagrams!" << std::endl;
    QByteArray datagram;
    QByteArray quit = "QUIT";
    datagram.resize(udpSocket->pendingDatagramSize());
    udpSocket->readDatagram(datagram.data(), datagram.size());
    std::cout << "Successfuly Recieved: " << QString(datagram).toStdString() << std::endl;
    return datagram;
}
